package empleadoAdministrativo;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.SwingUtilities;

import com.sun.org.apache.bcel.internal.generic.INSTANCEOF;
import com.toedter.calendar.JCalendar;
import com.toedter.calendar.JDateChooser;



import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import misc.Fechas;
import misc.Logica;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class ReporteSolicitud_GUI extends javax.swing.JFrame {

	{
		//Set Look & Feel
		try {
			javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

	private JLabel lblFechaInicial;
	private JLabel lblDestino;
	private JButton btnAceptar;
	private JButton btnVerReporte;
	private JTable tblReporte;
	private JScrollPane jScrollPane1;
	private JComboBox cmbDestino;
	private JLabel lblFechaFinal;
	private DefaultTableModel modeloReporte;
	private Logica logica;
	JCalendar cal;
	private JDateChooser jd_inicio;
	private JDateChooser jd_fin;
	private DefaultTableModel modeloTemp= new DefaultTableModel();
	private JTable tblTemp= new JTable();
	private DefaultComboBoxModel modeloDestino;
	private Fechas fecha;
	Empleado_GUI padre;
	
	

	/**
	* Auto-generated main method to display this JFrame
	*/
	
	public ReporteSolicitud_GUI(Empleado_GUI padre,Logica logica) {
		super();
		this.logica=logica;
		this.padre=padre;
		initGUI();
		mostrarDestinos();
	}
	
	
	public void obtenerDestinos() {
		ResultSet rs = logica.listadoDestinos();
		
		
		try {
			while (rs.next())
			{
			   // Se crea un array que será una de las filas de la tabla. 
			   Object [] fila = new Object[3]; // Hay 2 columnas en la tabla

			   // Se rellena cada posición del array con una de las columnas de la tabla en base de datos.
			   for (int i=0;i<2;i++) fila[i] = rs.getObject(i+1); // El primer indice en rs es el 1, no el cero, por eso se suma 1.

			   // Se añade al modelo la fila completa.
			   modeloTemp.addRow(fila); 
			}
			tblTemp.setModel(modeloTemp);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
       
	}
	
	
	
	
	
	
	private void mostrarDestinos() {
		obtenerDestinos();
		
		
		int filas = tblTemp.getRowCount();
		
		 
	        if (filas > 0) {
	            for (int i = 0; i <= filas-1; i++) {
	            	cmbDestino.addItem(modeloTemp.getValueAt(i,1).toString());
	            	
	            	
	            }
	        }
                    
                    	
		

		}
	
	
	private void mostrarReporte(int diaIni,int mesIni,int anioIni,int diaFin,int mesFin,int anioFin,int cod_destino) {
		ResultSet rs =  logica.obtenerReporte(date2String(diaIni,mesIni,anioIni), date2String(diaFin,mesFin,anioFin), cod_destino);
		logica.limpiar(modeloReporte);
		try {
			while (rs.next())
			{
			   // Se crea un array que será una de las filas de la tabla. 
			   Object [] fila = new Object[5]; // Hay 5 columnas en la tabla

			   // Se rellena cada posición del array con una de las columnas de la tabla en base de datos.
			   for (int i=0;i<5;i++) {
				   if (i==1) fila[i] = fecha.convertirDateAString((java.sql.Date) rs.getObject(i+1));
				   else  fila[i] = rs.getObject(i+1);
				 
				   // El primer indice en rs es el 1, no el cero, por eso se suma 1.
			   }
			   
			   // Se añade al modelo la fila completa.
			   modeloReporte.addRow(fila); 
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
			getContentPane().setLayout(null);
			this.setTitle("Reporte de Solicitudes");
			{
				lblFechaInicial = new JLabel();
				getContentPane().add(lblFechaInicial);
				lblFechaInicial.setText("Desde  [*]");
				lblFechaInicial.setBounds(40, 23, 90, 16);
			}
			{
				lblDestino = new JLabel();
				getContentPane().add(lblDestino);
				lblDestino.setText("Destino [*]");
				lblDestino.setBounds(40, 62, 84, 16);
			}
			{
				btnAceptar = new JButton();
				getContentPane().add(btnAceptar);
				btnAceptar.setText("Aceptar");
				btnAceptar.setBounds(340, 426, 104, 23);
				btnAceptar.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						btnAceptarActionPerformed(evt);
					}
				});
			}
			{
				btnVerReporte = new JButton();
				getContentPane().add(btnVerReporte);
				btnVerReporte.setText("Ver reporte");
				btnVerReporte.setBounds(601, 59, 130, 23);
				btnVerReporte.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						btnVerReporteActionPerformed(evt);
					}
				});
			}
			{
				lblFechaFinal = new JLabel();
				getContentPane().add(lblFechaFinal);
				lblFechaFinal.setText("Hasta [*]");
				lblFechaFinal.setBounds(368, 23, 91, 16);
			}
			{
				
				cmbDestino = new JComboBox();
				getContentPane().add(cmbDestino);
				cmbDestino.setBounds(142, 59, 157, 23);
			}
			{
				jScrollPane1 = new JScrollPane();
				getContentPane().add(jScrollPane1);
				jScrollPane1.setBounds(35, 94, 700, 306);
				{
					modeloReporte = new DefaultTableModel();
					modeloReporte.addColumn("Tipo Solicitud");
					modeloReporte.addColumn("Fecha presentacion");
					modeloReporte.addColumn("Interesado");
					modeloReporte.addColumn("Asunto");
					modeloReporte.addColumn("Fundamentacion");
		
					tblReporte = new JTable();
					jScrollPane1.setViewportView(tblReporte);
					tblReporte.setModel(modeloReporte);
					
				}
				{
					
					jd_inicio = new JDateChooser();
					getContentPane().add(jd_inicio);
					
					jd_inicio.setBounds(142, 15, 157, 24);
					 

				}
				{
					modeloTemp.addColumn("codigo");
					modeloTemp.addColumn("denominacion");
				}
				{
					jd_fin = new JDateChooser();
					getContentPane().add(jd_fin);
					jd_fin.setBounds(459, 16, 160, 23);

				}
			}
			pack();
			this.setSize(799, 490);
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}
	
	
	private String date2String(int dia,int mes,int anio) {
		return (Integer.toString(anio)+"-"+Integer.toString(mes)+"-"+Integer.toString(dia));
	}
	
	@SuppressWarnings("deprecation")
	private void btnVerReporteActionPerformed(ActionEvent evt) {
			
		  
		if (jd_inicio.getCalendar()!=null && jd_inicio.getCalendar()!=null) {
		   
		   int anioIni = jd_inicio.getCalendar().get(Calendar.YEAR);
		   int mesIni = jd_inicio.getCalendar().get(Calendar.MONTH) + 1;
		   int diaIni = jd_inicio.getCalendar().get(Calendar.DAY_OF_MONTH);
		   
		   int anioFin = jd_fin.getCalendar().get(Calendar.YEAR);
		   int mesFin = jd_fin.getCalendar().get(Calendar.MONTH) + 1;
		   int diaFin = jd_fin.getCalendar().get(Calendar.DAY_OF_MONTH);
		   
		   int destino=cmbDestino.getSelectedIndex();
		   int cod_destino=Integer.parseInt(logica.getData(tblTemp, destino, 0).toString());
		   		
		   mostrarReporte(diaIni,mesIni,anioIni,diaFin,mesFin,anioFin,cod_destino);
		   
		}
		else
		{
			//mostrar cartel que faltan fechas o estan mal formadas
		}

		
	}
	
	
	public void limpiarTabla() {
		logica.limpiar(modeloReporte);
	}
	
	
	
	
	private void btnAceptarActionPerformed(ActionEvent evt) {
		
		this.dispose();
		padre.setVisible(true);
		
		
		  	
		
	}

}
